#include <string>
#include "node.h"
#include "instance.h"

namespace AST {

    // Construtor Padrão
    Instance::Instance(Node* basetype, Node* limit) {
        // Configuração
        this->_setBasetype(basetype)->_setLimit(limit);
    };

    // Configuração de Tipagem de Instância
    Instance* Instance::_setBasetype(Node* basetype) {
        // Configuração
        this->_basetype = basetype;
        // Encadeamento
        return this;
    };

    // Configura o Limite Máximo de Utilização
    Instance* Instance::_setLimit(Node* limit) {
        // Configuração
        this->_limit = limit;
        // Encadeamento
        return this;
    };

    // Captura o Conteúdo Configurado como Identificador
    Node* Instance::getBasetype() {
        // Apresentação
        return this->_basetype;
    };

    // Captura da Expressão Limitadora
    Node* Instance::getLimit() {
        // Apresentação
        return this->_limit;
    };

    // Sobrescrita
    std::string Instance::toString(int indent) {
        // Apresentação
        return this->getIndentSpaces(indent)
            + "Instance\n"
            + this->getBasetype()->toString(indent + 1) + "\n"
            + this->getLimit()->toString(indent + 1);
    };

};

